perm filename PLTF80[MSS,LCS]1 blob sn#100920 filedate 1974-05-08 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	
C00007 ENDMK
C⊗;

TITLE PLTF80 -- FORTRAN PLOT ROUTINES FOR FR-80 OUTPUT

COMMENT ⊗

	APLOT(X,Y,UPDOWN) ← IF UPDOWN=0 THEN AIVECT(X,Y) ELSE AVECT(X,Y)
	OUTCMD(CMD) outputs the rightmost 18 bits on channel 17
	OUTCML(CMDL) does outcmd on successive words starting at
		    CMDL until a negative word is seen.
	FR80GO(FID,EXT,DEV) initializes FR80 output on the named file
		on channel 17.  
	FR80QUIT causes an "end of job" command, closes output on the fr80 file,
		& releases channel 17.
⊗
INTERNAL APLOT,OUTCMD,OUTCML,FR80GO,FR80QUIT
	
ARG← 16

CMD ← 0
A ← 1
B ← 2
C ← 3

XC ←← 0	;X COORD
YC ←← 1 ;Y COORD
UPDOWN ←← 2; =0 IF PEN IS UP

DEFINE VLC(A,B) = < 200000+A*1000+B>
DEFINE CHKP(A,B) = < A*4000+B>


APLOT:	0		;BECAUSE OF BLECHEROUS FORTRAN CALL
	MOVE	CMD,XC(ARG)
	IMUL	CMD,SCALEF 	;SCALE IT
	ANDI	CMD,37777 	;TRUNCATE IT
	SKIPE	@UPDOWN(ARG)	;ZERO MEANS PEN UP
	TROA	CMD,400000	;AN AVECT X-PART
	TRO	CMD,100000	;AN AIVECT X-PART
	JSA	ARG,OUTCMD	;PUT IT OUT
	JUMP	CMD
	MOVE	CMD,YC(ARG)	;
	IMUL	CMD,SCALEF	;Y COORD
	ANDI	CMD,37777	;
	TRO	CMD,40000	;SAY THE Y BIT IS ON
	JSA	ARG,OUTCMD	;PUT IT OUT
	JUMP	CMD
	JRA	ARG,3(ARG)	;RETURN

OUTCML:	0			;PUTS OUT A WHOLE LIST (-1) TERMINATES
	MOVEI	A,@(ARG)	;PICK UP POINTER TO LIST
OCML.X:	SKIPGE	(A)		;IS IT VALID
	JRA	ARG,1(ARG)	;NO--RETURN
	JSA	ARG,OUTCMD	;
	JUMP	(A)		;A POINTS AT A GOOD ONE
	AOJA	A,OCML.X	;GO BACK

OUTCMD:	0			;FORTRAN CALL FOR ONE CMD
	MOVE	CMD,@(ARG)
OUT.XX:	SOSG	FR80+2		;ANY LEFT IN THIS BUFFER??
	JRST	.+3
	IDPB	CMD,FR80+1	;
	JRA	ARG,1(ARG)	;RETURN
	OUT	17,
	JRST	.-3		;NOW PUT THINGS OUT
	OUTSTR	[ASCIZ /OUTPUT ERROR ON CHANNEL 17 (FR80)/]
	HALT	1(ARG)

DEV ←← 0			;SIXBIT DEVICE
FID ←← 1			;SIXBIT FILEID
EXT ←← 2

FR80:	0	;BUFFER HEADER
	0
	0

FR80FI:	0	;LOOKUP BLOCK
FR80EX:	0
	0
	0

FR80BK:	0	;OPEN BLOCK
FR80DV:	0
	XWD FR80,0

FR80GO: 0
	SKIPN	A,@DEV(ARG)
	MOVEI	A,'DSK'
	MOVEM	A,FR80DV
	OPEN	17,FR80BK
	JRST	[ OUTSTR [ASCIZ /OPEN FAILED FOR FR80 OUTPUT (CHANNEL 17)/]
	         HALT	3(ARG)]	;RETURN
	OUTBUF	17,6		;GET SOME BUFFERS
	MOVEI	A,(<POINT =18,0>)
	MOVEM	A,FR80+1	;MUNCH BYTE COUNT
	SKIPN	A,@FID(ARG)
	MOVE	A,[SIXBIT /FR80/]
	MOVEM	A,FR80FI
	SKIPN	A,@EXT(ARG)
	MOVEI	A,'F80'
	HLLZM	A,FR80EX
	ENTER	A,FR80FI	;ENTER
	JRST	[ OUTSTR [ASCIZ /ENTER FAILED ON FR80 OUTPUT FILE/]
		HALT	3(ARG)]	;JUST RETURN
	JSA	ARG,OUTCMD
	JUMP	[ CHKP(4,1740)]	;START JOB, RESET FRAME CNT,RESET, ETC
				;WHEN GET TEXT OUTPUT WORKING, MAY WANT TO
				;PUT OUT A JOBID
	JSA	ARG,OUTCML
	JUMP	[ VLC(16,0)	;SOLID LINES
		VLC(21,1)	;35MM UNSPROCKETED CAMERA, "COMIC" MODE
		-1		;END OF LIST FLAG
		]
	JRA	ARG,3(ARG)	;RETURN 

FR80QUIT: 0
	JSA	ARG,OUTCML
	JUMP	[ CHKP(7,1)	;FRAME ADVANCE
		CHKP(1,17)	;END JOB, PAUSE LEVEL=17
		-1
		]
	RELEASE	17,
	JRA	ARG,(ARG)

SCALEF:	2	;SCALE FACTOR (I THINK THIS WILL BE RIGHT THING)

END